﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Claro.QuestionModel;

namespace Claro.ClientInterface
{
    public partial class frmLobby : Form
    {
        clsEvento evento;
        Timer tmrBuscarResposta;
        Timer tmrNovaQuestao;
        clsQuestao questao;

        public frmLobby(clsQuestao questao)
        {
            InitializeComponent();
            this.evento = clsEvento.getInstance();
            this.questao = questao;
            
            if (questao == null)
                return;

            lblEnunciado.Text = questao.textoQuestao;

            AtualizarPlacar();

            //Timer verificando se a resposta foi divulgada
            tmrBuscarResposta = new System.Windows.Forms.Timer();
            tmrBuscarResposta.Interval = 300;
            tmrBuscarResposta.Tick += new System.EventHandler(BuscarResposta);
            tmrBuscarResposta.Enabled = true;

            //Timer verificando se uma nova questão foi lançada
            tmrNovaQuestao = new System.Windows.Forms.Timer();
            tmrNovaQuestao.Interval = 300;
            tmrNovaQuestao.Tick += new System.EventHandler(VerificarNovaQuestao);
        }

        private void BuscarResposta(object sender, EventArgs e)
        {
            string status = questao.SelecionarStatusQuestao(evento.codEvento);
            if (status == Status.Fechado)
            {
                questao.SelecionarDadosQuestao();
                foreach (clsAlternativa alt in questao.Alternativas)
                {
                    if (alt.estaCorreta)
                        lblResposta.Text += alt.textoAlternativa + "\n\n";
                }

                //Se a questão ja está fechada, pode atualizar o placar, 
                //pois o mesmo ja deve ter sido alterado
                AtualizarPlacar();
                tmrBuscarResposta.Enabled = false;
                tmrNovaQuestao.Enabled = true;
            }

        }

        /// <summary>
        /// Se uma nova questão for lançada, fecha o lobby, e retorna à tela da questão
        /// </summary>
        private void VerificarNovaQuestao(object sender, EventArgs e)
        {
            clsQuestao questaonova = clsQuestao.SelecionarQuestaoAberta(evento.codEvento);
            if (questaonova != null)
            {
                this.Close();
            }
        }
        
        private void AtualizarPlacar()
        {
            //dgvGrade.DataSource = evento.ExibirPlacar();
            DataTable dt = evento.ExibirPlacar();
            lvwGrade.BeginUpdate();

            lvwGrade.Items.Clear();
            foreach (DataRow linha in dt.Rows)
            {
                ListViewItem item = new ListViewItem(linha["nmGrupo"].ToString());

                string maquina = linha["maquina"].ToString();
                item.SubItems.Add(maquina);
                item.SubItems.Add(linha["Pontos"].ToString());
                
                lvwGrade.Items.Add(item);
            }

            lvwGrade.EndUpdate();
        }
    }
}
